package formykwadratowe;
/*
 * macierz.java
 *
 * Created on 14 marzec 2007, 19:25
 */
import javax.swing.*;
import javax.swing.text.*;
import javax.swing.JTextField;
import java.io.*;
import java.awt.*;
import org.jdesktop.layout.*;
import java.awt.event.*;
import formykwadratowe.oknoGlowne;
/**
 *
 * @author  aniaef
 */
public class macierz extends JFrame {
    
    public macierz(Integer n){
        rozmiar = n;
        oknoGlowne.rozmiarMacierzy = n;
        initMacierz(rozmiar);
    }
    private int rozmiar;
    
    private JLabel[][] etykiety;
    private IntegerTextField[][] wartosci;
    
    private JFormattedTextField[][] jFormattedTextField1;
    private MaskFormatter mf1;
    private NumberFormatter nf;
    private JScrollPane jScrollPane1;
    private JPanel jPanel1;
    private JButton zapisz;
    int i,j;
    
    // <editor-fold defaultstate="collapsed" desc=" Generated Code ">
    private void initMacierz(Integer rozmMacierzy) {
        this.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
        this.setVisible(true);
        setSize(200,300);
        etykiety = new JLabel[rozmMacierzy][rozmMacierzy];
        wartosci = new IntegerTextField[rozmMacierzy][rozmMacierzy];
        //-----------------------------
        oknoGlowne.wspolczynniki = new float[rozmMacierzy][rozmMacierzy];
        jScrollPane1 = new JScrollPane();
        jPanel1 = new JPanel();
        
        zapisz = new JButton("ZAPISZ");
        zapisz.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                zapiszActionPerformed(evt);
            }
        });
        zapisz.addKeyListener(new KeyAdapter() {
            public void keyReleased(KeyEvent evt) {
                zapiszKeyReleased(evt);
            }
        });
        //nazwanie kolejnych JLabel:
        Integer k,l;
        for(k=1;k<=rozmMacierzy;k++){
            for(l=1;l<=rozmMacierzy;l++){
                etykiety[k-1][l-1] = new JLabel();
                etykiety[k-1][l-1].setText("a"+k.toString()+","+l.toString());
            }
        }
        for(k=1;k<=rozmMacierzy;k++){
            for(l=1;l<=rozmMacierzy;l++){
                wartosci[k-1][l-1] = new IntegerTextField(3);
                wartosci[k-1][l-1].setText("0");
            }
        }
        
        setDefaultCloseOperation(HIDE_ON_CLOSE);
        jPanel1.setLayout(new GridLayout(rozmMacierzy*2+1, rozmMacierzy*2+1));
        
        for(l=1;l<=rozmMacierzy;l++){
            for(k=1;k<=rozmMacierzy;k++){
                jPanel1.add(etykiety[l-1][k-1]);
            }
            for(k=1;k<=rozmMacierzy;k++){
                jPanel1.add(wartosci[l-1][k-1]);
            }
        }
        jPanel1.add(zapisz);
        jScrollPane1.setViewportView(jPanel1);
        
        getContentPane().add(jScrollPane1);
        jScrollPane1.setBounds(0, 0, 450, 590);
        
        pack();
    }// </editor-fold>
    
    private void zapiszKeyReleased(KeyEvent evt) {
        String wynik ="";
        String forma ="";
        
        //zapis podanych przez uzytkownika wspolczynnikow macierzy do tablicy wspolczynniki[][]
        for(i=0;i<rozmiar;i++){
            oknoGlowne.wspolczynniki[i][i] = new Integer(wartosci[i][i].getText());
            for(j=i+1;j<rozmiar;j++){
                oknoGlowne.wspolczynniki[i][j] = new Integer(wartosci[i][j].getText());
                //uzupelnienie wspolczynnikow ponizej przekatnej, tak zeby macierz byla symetryczna
                oknoGlowne.wspolczynniki[j][i] = new Integer(wartosci[i][j].getText());
            }
        }
        
        
        // wypisywanie danych na ekran w postaci formy kwadratowej
        for(int k=0;k<rozmiar;k++){
            forma+= oknoGlowne.wspolczynniki[k][k]+"(x_"+k+")^2+";
        }
        for(int l=0;l<rozmiar-2;l++){
            for(int m=l+1;m<rozmiar;m++){
                forma+= 2*oknoGlowne.wspolczynniki[l][m]+"(x_"+l+")(x_"+m+")+";
                //zrobic cos, zeby ostatni plus nie byl wypisywany
            }
        }
        int wiersz = rozmiar-2;
        int kolumna = rozmiar-1;
        forma+= 2*oknoGlowne.wspolczynniki[wiersz][kolumna]+"(x_"+wiersz+")(x_"+kolumna+")";
        
        
        oknoGlowne.poleWynikow.setText(forma);
        
        this.setVisible(false);
        oknoGlowne.poleWynikow.setVisible(true);
    }
    //-------------------------------
    
    private void zapiszActionPerformed(ActionEvent evt) {
        String wynik ="";
        String forma ="";
        
        //zapis podanych przez uzytkownika wspolczynnikow macierzy do tablicy wspolczynniki[][]
        for(i=0;i<rozmiar;i++){
            oknoGlowne.wspolczynniki[i][i] = new Integer(wartosci[i][i].getText());
            for(j=i+1;j<rozmiar;j++){
                oknoGlowne.wspolczynniki[i][j] = new Integer(wartosci[i][j].getText());
                //uzupelnienie wspolczynnikow ponizej przekatnej, tak zeby macierz byla symetryczna
                oknoGlowne.wspolczynniki[j][i] = new Integer(wartosci[i][j].getText());
            }
        }
        
        
        // wypisywanie danych na ekran w postaci formy kwadratowej
        for(int k=0;k<rozmiar;k++){
            forma+= oknoGlowne.wspolczynniki[k][k]+"(x_"+k+")^2+";
        }
        for(int l=0;l<rozmiar-2;l++){
            for(int m=l+1;m<rozmiar;m++){
                forma+= 2*oknoGlowne.wspolczynniki[l][m]+"(x_"+l+")(x_"+m+")+";
                //zrobic cos, zeby ostatni plus nie byl wypisywany
            }
        }if(rozmiar>1){
            int wiersz = rozmiar-2;
            int kolumna = rozmiar-1;
            forma+= 2*oknoGlowne.wspolczynniki[wiersz][kolumna]+"(x_"+wiersz+")(x_"+kolumna+")";
        }
        
        oknoGlowne.poleWynikow.setText(forma);
        
        this.setVisible(false);
        oknoGlowne.poleWynikow.setVisible(true);
    }
}
